/*************************************************************************
                           Point2D  -  description
                             -------------------
    début                : 21 févr. 2012
    copyright            : (C) 2012 par francois
*************************************************************************/

//---------- Interface de la classe <Point2D> (fichier Point2D.h) ------
#if ! defined ( POINT2D_H_ )
#define POINT2D_H_
#include "Vector2D.h"
//--------------------------------------------------- Interfaces utilisées

namespace livgeo {

//class Vector2D; // Extension de Portée : inclusion circulaire
//------------------------------------------------------------- Constantes 

//------------------------------------------------------------------ Types 

//------------------------------------------------------------------------ 
// Rôle de la classe <Point2D>
//
// Classe représentant un point en 2 dimensions, dans un repère où les axes
// x et y sont positifs (pas de coordonnées négatives)
//------------------------------------------------------------------------ 
class Vector2D;
class Point2D
{
//----------------------------------------------------------------- PUBLIC

public:
//----------------------------------------------------- Méthodes publiques

	float getX() const { return x; }

	float getY() const { return y; }

	void setX(float x) { this->x = x; }

	void setY(float y) { this->y = y; }

//------------------------------------------------- Surcharge d'opérateurs
	Vector2D operator-(const Point2D& p) const;

	Point2D& operator+=(const Vector2D& vect);

	Point2D& operator-=(const Vector2D& vect);

	Point2D operator+(const Vector2D& vect) const;

	Point2D operator-(const Vector2D& vect) const;

//-------------------------------------------- Constructeurs - destructeur
    Point2D ( );
    // Constructeur par défaut: met les coordonnées en (0,0)

    Point2D(const Vector2D& vect);

    Point2D(float x, float y);
    // Contructeur: crée un point de coordonnées ( <x> , <y> )

    virtual ~Point2D ( );
    // Destructeur

//------------------------------------------------------------------ PRIVE 

protected:
//----------------------------------------------------- Méthodes protégées

//----------------------------------------------------- Attributs protégés
    float x;
    float y;
};
//--------------------------- Autres définitions dépendantes de <Point2D>

struct point2Dcomp
{
	bool operator() (const Point2D& p1, const Point2D& p2)
	{
		return (p1.getX() < p2.getX() || (p1.getX() == p2.getX() && p1.getY() < p2.getY()) );
	}
};

}; // ------ fin de livgeo

#endif // POINT2D_H_
